package gcp.testes;

import static org.junit.Assert.assertEquals;

import gcp.enums.ClassificacaoEtaria;
import gcp.Filme;
import gcp.Gibi;
import gcp.Jogo;
import gcp.enums.GeneroFilme;
import gcp.enums.GibiEstado;
import gcp.enums.ItemEstado;
import gcp.enums.Sexo;
import gcp.enums.TipoDeJogo;
import gcp.Usuario;
import gcp.cadastros.Cadastros;

import org.junit.Before;
import org.junit.Test;

/**
 * Classe de teste da Facade principal que adiciona qualquer item colecionavel
 * qualquer 
 * @author Diego
 */
public class CadastrosTeste {
    private Usuario crianca;
    private Gibi g1;
    private Filme f1;
    private Jogo j1;
    private Cadastros cadastro1;
       
	/**
     * Testa construtor de Cadastro
     * @throws Exception
     */
    @Before
    public void inicializa() throws Exception {
        g1 = new Gibi("Batman", "DC", 2009, ClassificacaoEtaria.DOZE, ItemEstado.FALTANDO,
                GibiEstado.CONSERVADO, "O melhor");
        f1 = new Filme("Debi & Lóide", "Playarte", 1994, ClassificacaoEtaria.LIVRE,
              ItemEstado.COMIGO, GeneroFilme.COMEDIA, null);
        j1 = new Jogo("Girafa above", "Hildegard", 2009, ClassificacaoEtaria.LIVRE,
                TipoDeJogo.PRIMEIRAPESSOA, ItemEstado.COMIGO, "lindo");
        cadastro1 = new Cadastros();
        crianca = new Usuario("Diego", "Ernesto", Sexo.MASCULINO, 
                "Dix", "xid");
        cadastro1.adiciona(crianca,g1);
        cadastro1.adiciona(crianca,f1);
        cadastro1.adiciona(crianca,j1);
    }
    
    /**
     * Testa tentar adicionar item com usuario null
     * @throws Exception 
     */
    @Test(expected = Exception.class)
    public void testaAdicionarItemUsuarioNull() throws Exception {
    	assertEquals(3,cadastro1.getList(crianca).size());
        cadastro1.adiciona(null,g1);
        cadastro1.adiciona(null,f1);
        assertEquals(3,cadastro1.getList(crianca).size());
    }
    
    /**
     * Testa tentar adicionar item com colecionavel null
     * @throws Exception 
     */
    @Test(expected = Exception.class)
    public void testaAdicionarItemColecionavelNull() throws Exception {
        cadastro1.adiciona(crianca,null);
        cadastro1.adiciona(crianca,null);
        assertEquals(3,cadastro1.getList(crianca).size());
    }
    
    /**
     * Testa tentar adicionar item ja adicionado
     * @throws Exception 
     */
    @Test(expected = Exception.class)
    public void testaAdicionarItemRepetido() throws Exception {
    	assertEquals(3,cadastro1.getList(crianca).size());
    	cadastro1.adiciona(crianca,g1);
        cadastro1.adiciona(crianca,f1);
        assertEquals(3,cadastro1.getList(crianca).size());
    }
    
    /**
     * Testa remover item 
     * @throws Exception 
     */
    @Test
    public void testaRemoveItem() throws Exception {
    	assertEquals(3,cadastro1.getList(crianca).size());
    	cadastro1.removeColecionavel(crianca,g1);
        cadastro1.removeColecionavel(crianca,f1);
        assertEquals(1,cadastro1.getList(crianca).size());
        }

    /**
     * Testa remover item repetido
     * @throws Exception 
     */
    @Test
    public void testaRemoveItemRepetido() throws Exception {
    	cadastro1.removeColecionavel(crianca,f1);
        }
    
    
}
